package com.haredot.utils;

import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Component
public class UploadUtils implements EnvironmentAware {

    private Environment environment ;

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment ;
    }

    /**
     * 获取 上传的 文件对象
     * @param suffix
     * @param filename
     * @return
     */
    public  File uploadFile(String suffix, String filename) {
        return new File(environment.getProperty("upload.dir") + suffix , filename);
    }
    /**
     *
     * @param part 上传的文件对象
     * @param suffix  : 存储的路径后缀    D:/servletUpload/UPLOAD_PHOTO
     * @return
     */
    public  String upload(Part part , String suffix) throws IOException {
        File parent = new File(environment.getProperty("upload.dir") + suffix);
        if (!parent.exists()) parent.mkdirs() ;

        // 随机生成一个 UUID ，作为 文件的名字
        String uuid = UUID.randomUUID().toString() ;
        // 获取 上传文件的 名字，并截取到 后缀名
        String filename = part.getSubmittedFileName();

        // 将文件名 和 UUID 进行拼接，形成 新的 文件名，并作为存储的名字
        String uploadName = uuid + filename ;

        // 将上传的文件进行存储
        part.write(new File(parent, uploadName).getAbsolutePath());
        // 返回 拼接后的 文件名
        return uploadName ;
    }

    public  String upload(MultipartFile part , String suffix) throws IOException {
        File parent = new File(environment.getProperty("upload.dir") + suffix);
        if (!parent.exists()) parent.mkdirs() ;

        // 随机生成一个 UUID ，作为 文件的名字
        String uuid = UUID.randomUUID().toString() ;
        // 获取 上传文件的 名字，并截取到 后缀名
        String filename = part.getOriginalFilename();

        // 将文件名 和 UUID 进行拼接，形成 新的 文件名，并作为存储的名字
        String uploadName = uuid + filename ;

        // 将上传的文件进行存储
        part.transferTo(new File(parent, uploadName));
        // 返回 拼接后的 文件名
        return uploadName ;
    }
}
